﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;
using System.ServiceModel.Web;
using VoluntariadoWindows8Backend.App_Data.DTO;
using VoluntariadoWindows8Backend.App_Data;

namespace VoluntariadoWindows8Backend
{

    [ServiceContract]
    public interface IVoluntariadoW8ClientService
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/getIniciativasSociales?loc={localidad}&cat={categoria}&num={numeroResultados}")]
        List<IniciativasSocialesDTO> GetIniciativasSociales(string localidad, string categoria, int numeroResultados);

        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/getCategorias/")]
        List<string> GetCategorias();
    }

    public class VoluntariadoW8ClientService : IVoluntariadoW8ClientService
    {
        public List<IniciativasSocialesDTO> GetIniciativasSociales(string localidad, string categoria, int numeroResultados)
        {
            try
            {
                using (voluntariadoW8Entities vme = new voluntariadoW8Entities())
                {
                    var iniciativas = vme.IniciativasSociales.Select(
                        x => new IniciativasSocialesDTO()
                        {
                            Id = x.Id,
                            Categoria = x.Categoria,
                            Descripcion = x.Descripcion,
                            FechaFin = x.FechaFin,
                            FechaInicio = x.FechaInicio,
                            FechaPublicacion = x.FechaPublicacion,
                            Localidad = x.Localidad,
                            Provincia = x.Provincia,
                            Titulo = x.Titulo,
                            Url = x.Url,
                            UrlImagen = x.UrlImagen
                        }
                 );
                    
                 if(localidad != "") iniciativas = iniciativas.Where(x => x.Localidad.Contains(localidad) || x.Provincia.Contains(localidad));
                 if(categoria != "") iniciativas = iniciativas.Where(x => x.Categoria == categoria);
                 if(numeroResultados > 0 ) iniciativas = iniciativas.Take(numeroResultados);

                 return iniciativas.OrderByDescending( x => x.FechaPublicacion).ToList();
                        
               }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<string> GetCategorias()
        {
            try
            {
                using (voluntariadoW8Entities vme = new voluntariadoW8Entities())
                {
                    return vme.IniciativasSociales.Select(x => x.Categoria).Distinct().ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    
    }
}
